home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / os-probes / mounted / 20microsoft < prev    next >
Text File  |  2009-10-05  |  2KB  |  72 lines

  1. #!/bin/sh
  2. # Detects all Microsoft OSes on a collection of partitions.
  3.  
  4. . /usr/share/os-prober/common.sh
  5.  
  6. partition=$1
  7. mpoint=$2
  8. type=$3
  9.  
  10. # Weed out stuff that doesn't apply to us
  11. case "$type" in
  12.     ntfs|ntfs-3g) debug "$1 is a NTFS partition" ;;
  13.     vfat) debug "$1 is a FAT32 partition" ;;
  14.     msdos) debug "$1 is a FAT16 partition" ;;
  15.     fuse|fuseblk) debug "$1 is a FUSE partition" ;; # might be ntfs-3g
  16.     *) debug "$1 is not a MS partition: exiting"; exit 1 ;;
  17. esac
  18.  
  19. # Vista (previously Longhorn)
  20. if item_in_dir -q bootmgr "$2" && boot="$(item_in_dir boot "$2")" &&
  21.    bcd="$(item_in_dir bcd "$2/$boot")"; then
  22.     if grep -qs "W.i.n.d.o.w.s. .7" "$2/$boot/$bcd"; then
  23.         long="Windows 7 (loader)"
  24.     else
  25.         long="Windows Vista (loader)"
  26.     fi
  27.     short=Windows
  28. # 2000/XP/NT4.0
  29. elif item_in_dir -q ntldr "$2" && item_in_dir -q ntdetect.com "$2"; then
  30.     long="Windows NT/2000/XP"
  31.     short=Windows
  32.     ini=$(item_in_dir boot.ini "$2")
  33.     if [ -n "$ini" ]; then
  34.         multicount="$(grep -e "^multi" "$2/$ini" | wc -l)"
  35.         scsicount="$(grep -e "^scsi" "$2/$ini" | wc -l)"
  36.         msoscount="$(expr ${multicount} + ${scsicount})"
  37.         if [ $msoscount -eq 1 ]; then
  38.             # We need to remove a Carriage Return at the end of
  39.             # the line...
  40.             defaultmspart="$(grep -e "^default=" "$2/$ini" | cut -d '=' -f2 | tr -d '\r')"
  41.             # Escape any backslashes in defaultmspart
  42.             grepexp="^$(echo $defaultmspart | sed -e 's/\\/\\\\/')="
  43.             # Colons not allowed; replace by spaces
  44.             # Accented characters (non UTF-8) cause debconf to
  45.             # hang, so we fall back to the default if the name
  46.             # contains any weird characters.
  47.             long="$(grep -e "$grepexp" "$2/$ini" | cut -d '"' -f2 | \
  48.                 tr ':' ' ' | LC_ALL=C grep -v '[^a-zA-Z0-9 &()/_-]')"
  49.             if [ -z "$long" ]; then
  50.                 long="Windows NT/2000/XP"
  51.             fi
  52.         else
  53.             long="Windows NT/2000/XP (loader)"
  54.         fi
  55.     fi
  56. # MS-DOS
  57. elif [ -d "$(item_in_dir dos $2)" ]; then
  58.     long="MS-DOS 5.x/6.x/Win3.1"
  59.     short=MS-DOS
  60. # 95/98/Me
  61. elif item_in_dir -q windows "$2" &&
  62.      item_in_dir -q win.com $2/$(item_in_dir windows "$2"); then
  63.     long="Windows 95/98/Me"
  64.     short=Windows9xMe
  65. else
  66.     exit 1
  67. fi
  68.  
  69. label=$(count_next_label $short)
  70. result "${partition}:${long}:${label}:chain"
  71. exit 0
  72.